package com.spring.beanpostprocessor;

/**
 * bean 后置处理器
 *
 * 可以在 bean 的初始化过程中 对 bean 进行修改或其他处理
 *
 *
 * 提供了默认实现（实际就是啥也没做，但是避免了一定要实现2个方法，可以选择实现其中一个）
 * 这里的 初始化前  并不是指 bean对象在 JVM 中的初始化前，  而是在容器中构建该对象后 ，还没有赋值前的这个 时刻
 */
public interface BeanPostProcessor {
	
	/**
	 * 初始化之前 处理方法
	 *
	 * @param bean     实例bean
	 * @param beanName bean名字
	 * @return 原始或者包装后的 bean ;  如果是 null ，表示结束这个bean 的初始化，不要这个bean了
	 */
	default Object postProcessBeforeInitialization(Object bean, String beanName) {
		return bean;
	}
	
	/**
	 * bean 初始化之后的 处理方法 ， 因为 bean 已经全部初始化完毕了，所以可以做一些 代理之类的包装了
	 *
	 * @param bean     实例bean
	 * @param beanName bean名字
	 * @return 原始或者包装后的 bean ;  如果是 null ，表示结束这个bean 的初始化，不要这个bean了
	 */
	default Object postProcessAfterInitialization(Object bean, String beanName) {
		return bean;
	}
}
